/**@file serial.c
 *
 * @brief 串口实现
 * @author SealedGhost
 * @date   2017_06_16
 */

#include "serial.h"


#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>


int serial_open(char* dev_name)
{
  int fd;
  
  fd  = open(dev_name, O_RDWR);
  return fd;
}



/**@brief 串口配置
 *
 */
int serial_config(int fd, int baud)
{
  struct termios config;
 
  if(tcgetattr(fd, &config) != 0)
  {
    perror("Serial setup failed");
    return 0;
  }
  
  config.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);
  config.c_oflag  &= ~OPOST;
  
  cfsetispeed(&config, baud);
  cfsetospeed(&config, baud);
 
  /** 设置字符大小  */
  config.c_cflag  |= (CLOCAL | CREAD);
  config.c_cflag  |= ~CSIZE;

  /** 设置停止位 */
  config.c_cflag  &= ~CSTOPB;

  /** 设置数据位  */
  config.c_cflag  &= CS8;

  /** 校验位  */
  config.c_cflag  &= ~PARENB;

  /** 设置等待时间和最小接收字符  */
  config.c_cc[VTIME]  = 0;
  config.c_cc[VMIN]  = 0;

  /** 清空缓冲区  */
  tcflush(fd, TCIFLUSH);
  
  if( (tcsetattr(fd, TCSANOW, &config)) != 0)
  {
    perror("Serial set error");
    return 0;
  }

  return 1;
}























